Java多线程 -- JUC包源码分析7 -- 对Interrupt的深刻理解

在前面的源码分析中,很多地方用到了Interrupt,在此,对Interrupt做一个深刻总结。

一、“中断“这个词有误区,它并不是真的中断一个线程,准备说,应该叫做“中断轻量级阻塞”。

什么叫“轻量级阻塞”呢?
就是调用以下这几个函数,所造成的线程阻塞。此时线程是处于Waiting状态,会响应t.interrupt。响应方式,前4个,是直接抛出InterruptException异常,最后1个,是线程被唤醒。
sleep/join/wait/await/LockSupport.park

什么叫“重量级阻塞”呢?
synchronzied, lock,这2个不会响应中断。但有点区别: synchronized会使线程处于Blocked状态,lock会使线程处于Waiting状态,因为lock内部用的LockSupport.park.

二、当你的线程正在正常运行时,这个时候调用t.interrupt,除了给该线程置了一个标志位,其他什么反应都没有。

那什么时候,这个标志位会起作用呢?后续线程调用上面的“轻量级阻塞”函数,会起作用。

三、总结: 中断,其实是提供了一种线程在”轻量级阻塞“状态下,可以被唤醒的机制。
因此中断通常都会和轻量级阻塞一起使用,很少会单独使用。

附:interrupt相关的3个函数
t.interrupt() //发中断信号
t.isInterrupted() //只是判断自己是否被中断
Thread.interrupted() //判断,并且重置标志位

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值